package top.huhuiyu.ds;

/**
 * 
 * @author Aiden Pearce
 *
 * @param <T>
 */
public class MyStack<T> {
  /**
   *  头节点
   */
  private MyNode<T> head = null;
  /**
   *  计数
   */
  private int count = 0;

  /**
   * 集合是否为空
   * @return
   */
  public boolean isEmpty() {
    return count <= 0;
  }

  /**
   * 集合的数据量
   * @return
   */
  public int size() {
    return count;
  }

  public T peek() {
    // 查看栈顶元素
    if (isEmpty()) {
      throw new RuntimeException("集合为空");
    }
    return head.getData();
  }

  public void push(T data) {
    /**
     * 新进节点 添加到栈顶（进栈）
     */
    MyNode<T> node = new MyNode<>(data);
    // 将原有的头设置成新元素的next节点
    node.setNext(head);
    // 将头指定为新元素
    head = node;
    // 计数加一
    count++;
  }

  /**
   * 出栈（取出栈顶的数据）
   * @return
   */
  public T pop() {
    if (isEmpty()) {
      throw new RuntimeException("集合为空");
    }
    // 获取头节点数据
    T data = head.getData();
    // 将头节点指向next节点
    head = head.getNext();
    // 计算器减一
    count--;
    return data;
  }
}
